package cn.iborder.common.config;

import java.text.SimpleDateFormat;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;

import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit;
import com.jfinal.log.Log4jLogFactory;
import com.jfinal.template.Engine;

import cn.iborder.controller.ConsoleController;
import cn.iborder.controller.LoginController;
import cn.iborder.core.ResMap;
import cn.iborder.core.ResPool;
import cn.iborder.handler.UrlInterceptHandler;
import cn.iborder.model.SysUser;
import cn.iborder.model._MappingKit;

import com.jfinal.ext.handler.UrlSkipHandler;
import com.jfinal.ext.interceptor.SessionInViewInterceptor;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.render.ViewType;

public class MainConfig extends JFinalConfig {
	/**
	 * 配置JFinal常量
	 */
	@Override
	public void configConstant(Constants me) {
		//读取数据库配置文件
		PropKit.use("config.properties");
		//设置当前是否为开发模式
		me.setDevMode(PropKit.getBoolean("devMode"));
		//设置默认上传文件保存路径 getFile等使用
		//me.setBaseUploadPath("upload/temp/");
		//设置上传最大限制尺寸
		//me.setMaxPostSize(1024*1024*10);
		//设置默认下载文件路径 renderFile使用
		//me.setBaseDownloadPath("download");
		//设置默认视图类型
		me.setViewType(ViewType.JSP);
		//设置404渲染视图
		//me.setError404View("404.html");
		me.setLogFactory(new Log4jLogFactory());
		
		SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd");
		String today = dateFormat.format(System.currentTimeMillis());
		JFinal.me().getServletContext().setAttribute("today", today);
		//初始化资源池
		ResPool.initConfig();
	}
	/**
	 * 配置JFinal路由映射
	 */
	@Override
	public void configRoute(Routes me) {
		me.add("/", LoginController.class);
		me.add("/console", ConsoleController.class);
	}
	/**
	 * 配置JFinal插件
	 * 数据库连接池
	 * ORM
	 * 缓存等插件
	 * 自定义插件
	 */
	@Override
	public void configPlugin(Plugins me) {
		int loginType = PropKit.getInt("loginType");
		//登录类型 1:mysql 2:prop
		if (loginType == 1) {
			//配置数据库连接池插件
			DruidPlugin dbPlugin=new DruidPlugin(PropKit.get("jdbcUrl"), PropKit.get("user"), PropKit.get("password"));
			//orm映射 配置ActiveRecord插件
			ActiveRecordPlugin arp=new ActiveRecordPlugin(dbPlugin);
		   
			arp.setShowSql(PropKit.getBoolean("devMode"));
			arp.setDialect(new MysqlDialect());
			dbPlugin.setDriverClass("com.mysql.jdbc.Driver");
			/********在此添加数据库 表-Model 映射*********/
			//如果使用了JFinal Model 生成器 生成了BaseModel 把下面注释解开即可
			 _MappingKit.mapping(arp);
			
			//添加到插件列表中
			me.add(dbPlugin);
			me.add(arp);
		}else if (loginType == 2) {

		}else{
			throw new RuntimeException("登录类型未配置");
		}
	}
	/**
	 * 配置全局拦截器
	 */
	@Override
	public void configInterceptor(Interceptors me) {
		me.addGlobalActionInterceptor(new SessionInViewInterceptor());
	}
	/**
	 * 配置全局处理器
	 */
	@Override
	public void configHandler(Handlers me) {
		me.add(new UrlSkipHandler("/ws", false));
		
		Map<String, Boolean> suffix = new HashMap<>();
		suffix.put("jsp", true);
		me.add(new UrlInterceptHandler(suffix));
	}
	
	/**
	 * 配置模板引擎 
	 */
	@Override
	public void configEngine(Engine me) {
		//这里只有选择JFinal TPL的时候才用
		//配置共享函数模板
		//me.addSharedFunction("/view/common/layout.html")
	}
	
	public static void main(String[] args) {
		//开发用
		//JFinal.start("src/main/webapp", 12580, "/", 5);
	}
	
}